package xuegao.study.mall.admin.service.pms.impl;

import com.github.pagehelper.PageHelper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import xuegao.study.mall.admin.dto.PmsProductAttributeParam;
import xuegao.study.mall.repo.dao.pms.PmsProductAttributeCategoryDao;
import xuegao.study.mall.repo.dao.pms.PmsProductAttributeDao;
import xuegao.study.mall.admin.service.pms.PmsProductAttributeService;
import xuegao.study.mall.common.dto.PmsProductAttrInfo;
import xuegao.study.mall.common.model.pms.PmsProductAttribute;
import xuegao.study.mall.common.model.pms.PmsProductAttributeCategory;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class PmsProductAttributeServiceImpl implements PmsProductAttributeService {

    @Autowired
    private PmsProductAttributeCategoryDao pmsProductAttributeCategoryDao;

    @Autowired
    private PmsProductAttributeDao pmsProductAttributeDao;


    @Override
    public List<PmsProductAttribute> getList(Long cid, Integer type, Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        Map<String, Object> params = new HashMap<>();
        params.put("product_attribute_category_id", cid);
        params.put("type", type);
        return pmsProductAttributeDao.selectByMap(params);
    }

    @Override
    public List<PmsProductAttributeCategory> categroyList(Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        Map<String, Object> params = new HashMap<>();
        return pmsProductAttributeCategoryDao.selectByParams(params);
    }

    @Override
    @Transactional
    public int deleteCategoryById(Long id) {
        return pmsProductAttributeCategoryDao.deleteById(id);
    }

    @Override
    @Transactional
    public int addCategory(String name) {
        PmsProductAttributeCategory category = new PmsProductAttributeCategory();
        category.setName(name);
        category.setAttributeCount(0);
        category.setParamCount(0);
        return pmsProductAttributeCategoryDao.insert(category);
    }

    @Override
    public int updateCategory(Long id, String name) {
        PmsProductAttributeCategory category = new PmsProductAttributeCategory();
        category.setId(id);
        category.setName(name);
        return pmsProductAttributeCategoryDao.updateById(category);
    }

    @Override
    public List<PmsProductAttrInfo> getProductAttrInfo(Long productCategoryId) {
        return pmsProductAttributeDao.getProductAttrInfo(productCategoryId);
    }

    @Override
    public PmsProductAttribute getItem(Long id) {
        return pmsProductAttributeDao.selectById(id);
    }

    @Override
    public int delete(List<Long> ids) {
        PmsProductAttribute pmsProductAttribute = pmsProductAttributeDao.selectById(ids.get(0));
        Integer type = pmsProductAttribute.getType();
        PmsProductAttributeCategory pmsProductAttributeCategory = pmsProductAttributeCategoryDao.selectById(pmsProductAttribute.getProductAttributeCategoryId());
        int count = pmsProductAttributeDao.deleteBatchIds(ids);
        // 删除完成后修改属性
        if (type == 0) {
            if (pmsProductAttributeCategory.getAttributeCount() >= count) {
                pmsProductAttributeCategory.setAttributeCount(pmsProductAttributeCategory.getAttributeCount() - count);
            } else {
                pmsProductAttributeCategory.setAttributeCount(0);
            }
        } else if (type == 1) {
            if (pmsProductAttributeCategory.getParamCount() >= count) {
                pmsProductAttributeCategory.setParamCount(pmsProductAttributeCategory.getParamCount() - count);
            } else {
                pmsProductAttributeCategory.setParamCount(0);
            }
        }
        pmsProductAttributeCategoryDao.updateById(pmsProductAttributeCategory);
        return count;
    }

    @Override
    public int create(PmsProductAttributeParam pmsProductAttributeParam) {
        PmsProductAttribute pmsProductAttribute = new PmsProductAttribute();
        BeanUtils.copyProperties(pmsProductAttributeParam, pmsProductAttribute);
        int count = pmsProductAttributeDao.insert(pmsProductAttribute);
        // 新增属性以后需要更新商品属性分类数量
        PmsProductAttributeCategory pmsProductAttributeCategory = pmsProductAttributeCategoryDao.selectById(pmsProductAttribute.getProductAttributeCategoryId());
        if (pmsProductAttribute.getType() == 0) {
            pmsProductAttributeCategory.setAttributeCount(pmsProductAttributeCategory.getAttributeCount() + 1);
        } else if (pmsProductAttribute.getType() == 1) {
            pmsProductAttributeCategory.setParamCount(pmsProductAttributeCategory.getParamCount() + 1);
        }
        pmsProductAttributeCategoryDao.updateById(pmsProductAttributeCategory);
        return count;
    }

    @Override
    public int update(Long id, PmsProductAttributeParam param) {
        PmsProductAttribute pmsProductAttribute = new PmsProductAttribute();
        pmsProductAttribute.setId(id);
        BeanUtils.copyProperties(param, pmsProductAttribute);
        return pmsProductAttributeDao.updateById(pmsProductAttribute);
    }
}
